package com.example.work.utils;

import java.time.LocalDateTime;
import java.util.Arrays;

public class SqlGeneratorExample {
    public static void main(String[] args) {
        // 示例1：生成单条更新SQL（使用数据库当前时间）
        String id1 = "123e4567-e89b-12d3-a456-426614174000";
        String assetId1 = "AST-2023-001";
        String sql1 = SqlGenerator.generateUpdateSql(id1, assetId1);
        System.out.println("单条更新SQL（使用数据库当前时间）:");
        System.out.println(sql1);
        
        // 示例2：生成单条更新SQL（使用指定时间）
        LocalDateTime specificTime = LocalDateTime.of(2023, 10, 15, 14, 30, 0);
        String sql2 = SqlGenerator.generateUpdateSqlWithTime(id1, assetId1, specificTime);
        System.out.println("\n单条更新SQL（使用指定时间）:");
        System.out.println(sql2);
        
        // 示例3：生成批量更新SQL
        SqlGenerator.AssetUpdate[] updates = {
            new SqlGenerator.AssetUpdate("id1", "asset1"),
            new SqlGenerator.AssetUpdate("id2", "asset2"),
            new SqlGenerator.AssetUpdate("id3", "asset3")
        };
        String batchSql = SqlGenerator.generateBatchUpdateSql(updates);
        System.out.println("\n批量更新SQL:");
        System.out.println(batchSql);
    }

    /**
     * 生成参数化更新SQL（使用PreparedStatement）
     * @return 参数化SQL模板
     */
    public static String generateParameterizedUpdateSql() {
        return "UPDATE rank_log_asset_info_basis_web " +
                "SET asset_id = ?, update_time = ? " +
                "WHERE id = ?";
    }

    /**
     * 生成参数化批量更新SQL（使用PreparedStatement）
     * @param count 批量更新的记录数
     * @return 参数化SQL模板
     */
    public static String generateParameterizedBatchUpdateSql(int count) {
        StringBuilder sql = new StringBuilder(
                "UPDATE rank_log_asset_info_basis_web " +
                        "SET asset_id = CASE id "
        );

        for (int i = 0; i < count; i++) {
            sql.append("WHEN ? THEN ? ");
        }

        sql.append("END, update_time = ? WHERE id IN (");

        for (int i = 0; i < count; i++) {
            if (i > 0) sql.append(", ");
            sql.append("?");
        }

        sql.append(");");
        return sql.toString();
    }
}